package Java1Test;

public class Recursion {
    public static void main(String[] args) {
        //需求：利用递归求1-100之间的和
        //100 + 99 + 98 + 97 + 96 + 95 .... + 2 + 1

        //大问题拆解成小问题
        //1~100之间的和 = 100 + （1~99之间的和）
        //1~99之间的和 = 99 + （1~98之间的和）
        //1~98之间的和 = 98 + （1~97之间的和）
        //。。。
        //1~2之间的和 = 2 + （1~1之间的和）
        //1~1之间的和 = 1（递归的出口）

        //核心：
        //1.找出口
        //2.找规律

        System.out.println(getSum(100));//5050
        System.out.println(calculateFactorial(5));
    }

    /**
     * 递归计算1到n的累加和
     * @param n 输入的正整数
     * @return 累加和结果
     */
    public static int getSum(int n) {
        if (n == 1) return 1; // 递归出口
        return n + getSum(n - 1); // 递归关系
    }

    /**
     * 递归计算n的阶乘
     * @param n 输入的正整数
     * @return 阶乘结果
     */
    public static int calculateFactorial(int n) {
        if (n == 1) return 1; // 递归出口
        return n * calculateFactorial(n - 1); // 递归关系
    }
}